/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package srac.controleeventos.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cdp.TipoUsuario;
import srac.controleatividades.cdp.Usuario;
import srac.controleeventos.cci.CtrlEvento;
import srac.controleeventos.cdp.Evento;

/**
 *
 * @author gquezid
 */
public class PagEventosInscricao extends GenericForwardComposer {
    private CtrlEvento ctrl = CtrlEvento.getInstance();
    private Window winEventosEventos;
    private Listbox listEventos;
    private Div boxInformacao;
    private Label msg;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventosInscricao(this);
        
        List<Evento> eventos = ctrl.obterEventoAberto();
        if (eventos != null) {
            for (int i = 0; i < eventos.size(); i++) {
                Evento e = eventos.get(i);
                Listitem linha = new Listitem(eventos.get(i).getNome(), e);

                linha.appendChild(new Listcell(eventos.get(i).getVagas() + ""));

                linha.setParent(listEventos);
            }
        }
    }

    public void onCreate$winEventosEvento(Event event) {
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winEventosEventos.detach();
        }
    }
    

    public void addEvento(Evento e) {
        Listitem linha = new Listitem(e.getNome(), e);
        linha.appendChild(new Listcell(e.getVagas() + ""));
        linha.setParent(listEventos);
    }

    public void refreshEvento(Evento e) {
        for (int i = 0; i < listEventos.getItemCount(); i++) {
            if (listEventos.getItemAtIndex(i).getValue() == e) {
                listEventos.getItemAtIndex(i).getChildren().clear();
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getNome()));
                listEventos.getItemAtIndex(i).appendChild(new Listcell(e.getVagas() + ""));
                break;
            }
        }
    }
        
    // TODO: Ao término da operação, o número de vagas do evento não é atualizado na tela (somente no banco)
    // Além disso, não há mensagem de confirmação para o usuário
    public void onClick$inscreverEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            Evento e = (Evento) listitem.getValue();
            if(e.getVagas() > 0){
                Usuario u = (Usuario) Executions.getCurrent().getSession().getAttribute("usuario");
                if(u!=null)
                {
                    if(u.getTipo().equals(TipoUsuario.ALUNO))
                    {
                        ctrl.inscreverAlunoEvento(u,e);
                    } 
                }
                else
                {
                    ctrl.abrirInscricaoEvento(e); 
                }
            }
            else {
                setMensagemAviso("info", "Esse evento não possui mais vagas");
            }
            
        } else {
            setMensagemAviso("info", "Selecione um evento");
        }
    }

    public void onClick$consultarEvento(Event event) {
        Listitem listitem = listEventos.getSelectedItem();
        if (listitem != null) {
            ctrl.abrirConsultarEvento((Evento) listitem.getValue());
        } else {
            setMensagemAviso("info", "Selecione um evento");
        }
    }

    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }

}
